#ifndef TVM_PROGRAM_H_
#define TVM_PROGRAM_H_

#include <stdlib.h>
#include <stdio.h>
#include <string.h>

#include "tvm_htab.h"
#include "tvm_memory.h"

struct tvm_prog
{
    int start;

    int num_instr; // 指令个数
    int *instr;    // 指令内存地址
    int ***args;   // 参数内存地址

    int **values;   // 值内存地址
    int num_values; // 值的个数

    struct tvm_htab_ctx *defines;    // define映射表
    struct tvm_htab_ctx *label_htab; // 标签映射表
};

/* Create and initialize an empty program object */
struct tvm_prog *tvm_prog_create();

void tvm_prog_destroy(struct tvm_prog *p);

#endif
